package org.springblade.modules.auth.utils;

import lombok.extern.slf4j.Slf4j;
import org.springblade.common.cache.DictBizCache;
import org.springblade.core.tool.jackson.JsonUtil;

import java.lang.reflect.Field;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
 *
 *  Obj转map 暂时不太好用 用的ali的
 *
 * */
@Slf4j
public class otherUtils {




	/**
	 * 对象转map
	 *
	 * @param obj
	 * @return
	 */
	public static Map<String, Object> objToMap(Object obj) {

		Map<String, Object> map = new HashMap<String, Object>();
		Field[] fields = obj.getClass().getDeclaredFields();	// 获取f对象对应类中的所有属性域
		for (int i = 0, len = fields.length; i < len; i++) {
			String varName = fields[i].getName();
			varName = varName.toLowerCase();					// 将key置为小写，默认为对象的属性
			try {
				boolean accessFlag = fields[i].isAccessible();	// 获取原来的访问控制权限
				fields[i].setAccessible(true);					// 修改访问控制权限
				Object o = fields[i].get(obj);					// 获取在对象f中属性fields[i]对应的对象中的变量
				if (o != null){
					map.put(varName, o.toString());
				}
				fields[i].setAccessible(accessFlag);			// 恢复访问控制权限
			} catch (IllegalArgumentException ex) {
				ex.printStackTrace();
			} catch (IllegalAccessException ex) {
				ex.printStackTrace();
			}
		}
		return map;
	}






	/**
	 * 利用反射实现
	 * <li>空属性不转换
	 * <li>超过10万条数据不建议使用
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public static Map<String, Object> objToMap2(Object obj) throws Exception {

		if (obj == null) {
			return null;
		}



		Map<String, Object> map = new HashMap<String, Object>();
		Field[] fields = obj.getClass().getDeclaredFields();
		for (int i = 0, len = fields.length; i < len; i++) {
			String varName = fields[i].getName();
			boolean accessFlag = fields[i].isAccessible();
			fields[i].setAccessible(true);// 允许通过反射访问该字段

			Object valueObj = fields[i].get(obj);
			if (valueObj != null) {
				map.put(varName, valueObj);
			}
			fields[i].setAccessible(accessFlag);
		}
		return map;
	}



	/**
	 * 字典类
	 * 在后台的 “系统管理”里面的“业务字典”点击“新增后”  可以创建一个枚举
	 * 在点击枚举  在点击弹窗里面的新增 就可以创建对应的字段了
	 * 反正就是查那里面的数据的
	 *
	 *
	 *
	 *
	 * */
	public String GetDictionaries(){

		log.info("查询字典："+DictBizCache.getValue("exp_trade_type","1000"));
		log.info("查询字典2："+ JsonUtil.toJson(DictBizCache.getList("exp_trade_type")));
		//查询  后台业务字典里面   字典编号是“exp_trade_type”  字典键值是1000 的 字典名称是啥
		return DictBizCache.getValue("exp_trade_type","1000");
	}


//	long StartTime = System.currentTimeMillis(); 	// 1、开始时间
//	long endTime = System.currentTimeMillis(); 	// 2、结束时间
//
//	float time=   (endTime-StartTime)/1000;		//秒数




	public static void test(String date1, int day)
	{

		String	thisYearDate = DateUtils.getDate("yyyy-MM-dd",-24, Calendar.HOUR_OF_DAY);
		log.info("检查thisYearDate："+thisYearDate);
		String lastYearDate= (Integer.parseInt(thisYearDate.substring(0,4))-1)+"-"+thisYearDate.substring(5,7)+"-"+thisYearDate.substring(8,10);
		log.info("检查lastYearDate："+lastYearDate);
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");//定义一个formate
		try{
			//字符串转Date
			Date date =simpleDateFormat.parse(lastYearDate);
			log.info("检查date："+date);
			//去年昨天的毫秒
			Long a1=date.getTime();
			log.info("检查a1："+a1);
			//long 转yyyy-MM-dd
			date.setTime(a1);
			String temp= simpleDateFormat.format(date);
			log.info("检查a1转后："+temp);

			//在得到去年昨天天在前7天的毫秒数
			Long a2=date.getTime()-6*1000*60*60*24;
			log.info("检查a2："+a2);
			//long 转yyyy-MM-dd
			date.setTime(a2);
			String temp1= simpleDateFormat.format(date);
			log.info("检查a2转后："+temp1);

		}catch (ParseException pe){
			System.out.println(pe.getMessage());
		}
	}

	public static void main(String[] args) {
//		GetDate01("2021-12-28",7);
//		test("",0);
	}



}
